# --^_^-- coding:utf-8 --^_^--
# @Remark:运行入口

"""
记录一下用例执行过程 - 日志
如果用例失败 - Trackback报错信息 - 失败了截图。
记录一下， 用例的运行时间 - 起始 - 等待的时候，等待时长。
用例、页面对象当中。 用例 = 页面对象 + 测试数据
断言失败了！！ 页面对象方法执行的时候，报错了！！
页面对象-任意功能 = 等待元素可见，等待元素存在、点击、输入、文本获取、属性获取
alert切换、iframe切换、下拉列表、上传。。。
提供测试报告
"""
import datetime
import unittest

from Common.HTMLTestRunnerCN import HTMLTestReportCN
from Common.dir_config import *

from tomorrow import threads
from Common.BeautifulReport import BeautifulReport


def add_case(case_path=testcases_dir, rule="test*.py"):
    """加载所有的测试用例"""
    discover = unittest.defaultTestLoader.discover(case_path, pattern=rule, top_level_dir=None)
    return discover


@threads(5)
def run_case(all_case, report_path=htmlreport_dir, nth=0):
    """执行所有的用例, 并把结果写入测试报告， 报告是分开的"""
    report_name = '/web平台测试报告{}.html'.format(datetime.datetime.now().strftime("%Y%m%d%H%M"))
    with open(htmlreport_dir + report_name, "wb+") as file:
        runner = HTMLTestReportCN(stream=file, title="web测试报告", description="登录页面功能测试！！", tester="QA", verbosity=2)
        # 调用add_case函数返回值
        runner.run(all_case)


@threads(5)
def run(case, report_name):
    """合并的报告"""
    result = BeautifulReport(case)
    result.report(filename=report_name, description='测试deafult报告', log_path=htmlreport_dir)


if __name__ == "__main__":

    # 用例集合
    cases = add_case()
    report_name = 'web测试报告{}.html'.format(datetime.datetime.now().strftime("%Y%m%d%H%M"))
    # 之前是批量执行，这里改成for循环执行
    for i, j in zip(cases, range(len(list(cases)))):
        # run_case(i, nth=j)  # 执行用例，生成报告
        print(i, j)
        run(i, report_name)
